agentmux_srv\backend\wcore/
event.rs1#![allow(dead_code)]
2use crate::backend::oref::ORef;
8use crate::backend::storage::wstore::WaveStore;
9use crate::backend::obj::*;
10use crate::backend::wps::{self, Broker, WaveEvent};
11
12pub fn send_wave_obj_update(broker: &Broker, store: &WaveStore, oref: &ORef) {
14 let obj_json = match oref.otype.as_str() {
15 OTYPE_CLIENT => store
16 .get::<Client>(&oref.oid)
17 .ok()
18 .flatten()
19 .and_then(|o| serde_json::to_value(&o).ok()),
20 OTYPE_WINDOW => store
21 .get::<Window>(&oref.oid)
22 .ok()
23 .flatten()
24 .and_then(|o| serde_json::to_value(&o).ok()),
25 OTYPE_WORKSPACE => store
26 .get::<Workspace>(&oref.oid)
27 .ok()
28 .flatten()
29 .and_then(|o| serde_json::to_value(&o).ok()),
30 OTYPE_TAB => store
31 .get::<Tab>(&oref.oid)
32 .ok()
33 .flatten()
34 .and_then(|o| serde_json::to_value(&o).ok()),
35 OTYPE_LAYOUT => store
36 .get::<LayoutState>(&oref.oid)
37 .ok()
38 .flatten()
39 .and_then(|o| serde_json::to_value(&o).ok()),
40 OTYPE_BLOCK => store
41 .get::<Block>(&oref.oid)
42 .ok()
43 .flatten()
44 .and_then(|o| serde_json::to_value(&o).ok()),
45 _ => None,
46 };
47
48 if let Some(obj) = obj_json {
49 broker.publish(WaveEvent {
50 event: wps::EVENT_WAVE_OBJ_UPDATE.to_string(),
51 scopes: vec![oref.to_string()],
52 sender: String::new(),
53 persist: 0,
54 data: Some(serde_json::json!({
55 "updatetype": UPDATE_TYPE_UPDATE,
56 "otype": oref.otype,
57 "oid": oref.oid,
58 "obj": obj,
59 })),
60 });
61 }
62}